এখানে আমরা Linked Lists, Stacks, এবং Queues তৈরি করতে শিখব। এই তিনটি ডেটা স্ট্রাকচার প্রোগ্রামিংয়ে সাধারণত ব্যবহৃত হয়, এবং তারা নিজেদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রাখে। প্যাসক্যাল ভাষায় তাদের বাস্তবায়ন কিভাবে করা যায়, তা দেখব।
১. Linked List
Linked List একটি ডেটা স্ট্রাকচার যেখানে প্রতিটি উপাদান (নোড) একটি ডেটা এবং পরবর্তী নোডের রেফারেন্স (পয়েন্টার) ধারণ করে। এটি একটি সিকুয়েন্স্যাল ডেটা স্ট্রাকচার, কিন্তু প্রতিটি নোড একে অপরের সাথে সম্পর্কিত থাকে।
Linked List এর গঠন:
প্রতিটি নোডের মধ্যে দুটি অংশ থাকে:
- ডেটা: নোডের মূল মান।
- পয়েন্টার: পরবর্তী নোডের ঠিকানা।
প্যাসক্যাল কোড:
program LinkedListExample;
type
Node = ^NodeRec;
NodeRec = record
data: Integer;
next: Node;
end;
var
head: Node;
procedure InsertFront(var head: Node; value: Integer);
var
newNode: Node;
begin
New(newNode); { নতুন নোড তৈরি }
newNode^.data := value;
newNode^.next := head; { পরবর্তী নোডকে প্রাক্তন হেডের রেফারেন্সে সংযুক্ত করুন }
head := newNode; { হেড পয়েন্টার আপডেট করুন }
end;
procedure PrintList(head: Node);
var
temp: Node;
begin
temp := head;
while temp <> nil do
begin
writeln(temp^.data);
temp := temp^.next;
end;
end;
begin
head := nil;
InsertFront(head, 10);
InsertFront(head, 20);
InsertFront(head, 30);
writeln('Linked List:');
PrintList(head);
end.আউটপুট:
Linked List:
30
20
10এখানে, InsertFront ফাংশনটি লিঙ্কড লিস্টের শুরুতে নতুন নোড যোগ করে এবং PrintList ফাংশনটি লিঙ্কড লিস্টের সমস্ত উপাদান প্রিন্ট করে।
২. Stack
Stack একটি লিনিয়ার ডেটা স্ট্রাকচার যা LIFO (Last In, First Out) পদ্ধতিতে কাজ করে। অর্থাৎ, সর্বশেষে ঢোকানো উপাদানটি প্রথমে বের হবে।
প্যাসক্যাল কোড:
program StackExample;
type
Stack = record
arr: array[1..10] of Integer;
top: Integer;
end;
procedure InitStack(var s: Stack);
begin
s.top := 0; { স্ট্যাকটি শূন্য অবস্থায় শুরু করুন }
end;
procedure Push(var s: Stack; value: Integer);
begin
if s.top < 10 then
begin
s.top := s.top + 1;
s.arr[s.top] := value;
end
else
writeln('Stack is full');
end;
function Pop(var s: Stack): Integer;
begin
if s.top > 0 then
begin
Pop := s.arr[s.top];
s.top := s.top - 1;
end
else
begin
writeln('Stack is empty');
Pop := -1;
end;
end;
begin
var myStack: Stack;
InitStack(myStack);
Push(myStack, 10);
Push(myStack, 20);
Push(myStack, 30);
writeln('Popped: ', Pop(myStack));
writeln('Popped: ', Pop(myStack));
writeln('Popped: ', Pop(myStack));
writeln('Popped: ', Pop(myStack)); { Stack is empty }
end.আউটপুট:
Popped: 30
Popped: 20
Popped: 10
Stack is emptyএখানে, Push ফাংশনটি স্ট্যাকে নতুন উপাদান যোগ করে এবং Pop ফাংশনটি সর্বশেষ উপাদানটি সরিয়ে নেয় (LIFO অনুযায়ী)।
৩. Queue
Queue একটি লিনিয়ার ডেটা স্ট্রাকচার যা FIFO (First In, First Out) পদ্ধতিতে কাজ করে। অর্থাৎ, প্রথমে ঢোকানো উপাদানটি প্রথমে বের হবে।
প্যাসক্যাল কোড:
program QueueExample;
type
Queue = record
arr: array[1..10] of Integer;
front, rear: Integer;
end;
procedure InitQueue(var q: Queue);
begin
q.front := 0;
q.rear := 0;
end;
procedure Enqueue(var q: Queue; value: Integer);
begin
if q.rear < 10 then
begin
q.rear := q.rear + 1;
q.arr[q.rear] := value;
end
else
writeln('Queue is full');
end;
function Dequeue(var q: Queue): Integer;
begin
if q.front < q.rear then
begin
q.front := q.front + 1;
Dequeue := q.arr[q.front];
end
else
begin
writeln('Queue is empty');
Dequeue := -1;
end;
end;
begin
var myQueue: Queue;
InitQueue(myQueue);
Enqueue(myQueue, 10);
Enqueue(myQueue, 20);
Enqueue(myQueue, 30);
writeln('Dequeued: ', Dequeue(myQueue));
writeln('Dequeued: ', Dequeue(myQueue));
writeln('Dequeued: ', Dequeue(myQueue));
writeln('Dequeued: ', Dequeue(myQueue)); { Queue is empty }
end.আউটপুট:
Dequeued: 10
Dequeued: 20
Dequeued: 30
Queue is emptyএখানে, Enqueue ফাংশনটি কিউতে নতুন উপাদান যোগ করে এবং Dequeue ফাংশনটি প্রথম উপাদানটি সরিয়ে নেয় (FIFO অনুযায়ী)।
সারাংশ
- Linked List: এটি একটি সিকুয়েন্সিয়াল ডেটা স্ট্রাকচার, যেখানে প্রতিটি নোডে একটি ডেটা এবং পরবর্তী নোডের রেফারেন্স থাকে।
- Stack: এটি একটি লিনিয়ার ডেটা স্ট্রাকচার যা LIFO (Last In, First Out) পদ্ধতিতে কাজ করে। শেষের দিকে ঢোকানো উপাদান প্রথমে বের হবে।
- Queue: এটি একটি লিনিয়ার ডেটা স্ট্রাকচার যা FIFO (First In, First Out) পদ্ধতিতে কাজ করে। প্রথমে ঢোকানো উপাদান প্রথমে বের হবে।
এই তিনটি ডেটা স্ট্রাকচার প্রোগ্রামিংয়ের ক্ষেত্রে খুবই গুরুত্বপূর্ণ এবং বিভিন্ন সমস্যার সমাধান করার জন্য ব্যবহৃত হয়।
Read more